gsk: Improve glyph serialization
authorMatthias Clasen <mclasen@redhat.com>
Mon, 21 Dec 2020 18:08:34 +0000 (13:08 -0500)
committerMatthias Clasen <mclasen@redhat.com>
Mon, 21 Dec 2020 18:08:34 +0000 (13:08 -0500)
The special case for ASCII glyphs is unfortunately not
working very well, because of an oversight in pango:
When I added subpixel positioning, I made pango_shape()
default to not rounding, and make PangoLayout call
pango_shape_with_flags() and pass the rounding information
down. The upshot is that we need to use the _with_flags
variant here and tell it to round position, so it matches
what the text node contains.

gsk/gskrendernodeparser.c

index a77e8a5a9a756819f9fb39a7681ce2d454205905..45b500dc42d8b80f8bdc2b26e47cd5ed754b83aa 100644 (file)
@@ -688,10 +688,16 @@ create_ascii_glyphs (PangoFont *font)
   glyph_string = pango_glyph_string_new ();
   for (i = MIN_ASCII_GLYPH; i < MAX_ASCII_GLYPH; i++)
     {
-      pango_shape ((char[2]) { i, 0 },
-                   1,
-                   &not_a_hack,
-                   glyph_string);
+      const char text[2] = { i, 0 };
+
+      pango_shape_with_flags (text,
+                              1,
+                              text,
+                              1,
+                              &not_a_hack,
+                              glyph_string,
+                              PANGO_SHAPE_ROUND_POSITIONS);
+
       if (glyph_string->num_glyphs != 1)
         {
           pango_glyph_string_free (glyph_string);